/**
 * 
 * 字符串变换最小字符串
 * 
 * 题目描述

给定一个字符串s，最多只能进行一次变换，返回变换后能得到的最小字符串（按照字典序进行比较）。

变换规则：交换字符串中任意两个不同位置的字符。

输入描述
一串小写字母组成的字符串s

输出描述
按照要求进行变换得到的最小字符串。


备注
s是都是小写字符组成
1 ≤ s.length ≤ 1000

用例
输入	abcdef
输出	abcdef
说明	abcdef已经是最小字符串，不需要交换。
输入	bcdefa
输出	acdefb
说明	a和b进行位置交换，可以得到最小字符串
 * 
 * 
 * 本题关键是只能交换一次
 * 先使用Arrays.sort(inputChars);排序后，字符从小到大排列
 * 如果排序后的字符串和输入的字符串一致，则表示已经是最小了
 * 如果排序后的字符串和输入的字符串不一致，则需要遍历交换，因为只能交换一次
 * 则交换第一个遇到不一样的字符，因为Arrays.sort 是从小到大排列
 * 被交换的字符应该放在和最后一个出现值的位置交换
 * 
 * 
 * 
 */

import java.util.Arrays;
import java.util.Scanner;

/**
  * 
  题目解析
我的思路如下，先将输入的字符串str进行字典排序，得到一个新串minStr，如果str和minStr相同，则说明str已经是最小字符串，不需要任何变换，直接返回str。
如果str和minStr不同，则说明str不是最小字符串，我们需要遍历出str的每一个字符，对比str[i] 和 minStr[i] ，具体处理逻辑如下图
  */
public class 字符串变换最小字符串 {
    
    public static void main(String[] args) {
        
        try{

            Scanner scanner = new Scanner(System.in);

            //输入字符串
            String originStr = scanner.nextLine();

            //进行字典排序
            char[] originChars = originStr.toCharArray();

            Arrays.sort(originChars);

            System.out.println("字典排序后的字符串："+new String(originChars));

            String resultS = new String(originChars);
            if(originStr.equals(resultS)){

                System.out.println(originStr);
            } else {

                char[] swapChars = originStr.toCharArray();

                for(int i=0; i< swapChars.length; i++){

                    if(originChars[i] != swapChars[i]){

                        //交换位置
                        char tempChar  = swapChars[i];
                        swapChars[i] = originChars[i];

                        //替换字符串最后一个值
                        int tempIndex = originStr.lastIndexOf(originChars[i]);
                        swapChars[tempIndex] = tempChar;

                        break;
                    }

                }

                System.out.println(new String(swapChars));
            }
            

        }catch(Exception e){
            e.printStackTrace();
            System.out.println("程序异常"+(null==e? "" : e.getMessage()));
        }

    }
}
